/**
 * 日期/时间格式化
 * @param fmt 格式要求：datetime / date / time  完整值: yyyy-MM-dd hh:mm:ss
 * @param date 传入时间
 * @param flag true: 中文 / 不传或false: 英文
 * @returns {string} 返回格式化后的字符
 */
export function useFormatTime(fmt: string, date: Date, flag?: boolean): string {
  date = new Date(date) || date
  flag = flag || false
  if (fmt === 'datetime') {
    fmt = flag ? 'yyyy年MM月dd日 hh时mm分ss秒' : 'yyyy-MM-dd hh:mm:ss'
  } else if (fmt === 'date') {
    fmt = flag ? 'yyyy年MM月dd日' : 'yyyy-MM-dd'
  } else if (fmt === 'time') {
    fmt = flag ? 'hh时mm分ss秒' : 'hh:mm:ss'
  } else if (fmt === 'timeNoSecond') {
    fmt = flag ? 'hh时mm分' : 'hh:mm'
  } else if (fmt === 'datetimeString') {
    fmt = flag ? 'yyyy年MM月dd日 hh时mm分ss秒' : 'yyyyMMddhhmmss'
  }
  const obj: any = {
    'y+': date.getFullYear(),
    'M+': date.getMonth() + 1, // 月份
    'd+': date.getDate(), // 日
    'h+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds() // 秒
  }
  // 2.1遍历取出所有的时间
  for (const key in obj) {
    // let reg = new RegExp("M+");
    const reg = new RegExp(`${key}`)
    // 取出格式化字符串中对应的格式字符 MM dd hh mm ss
    let fmtStr: any = fmt.match(reg)
    if (fmtStr) {
      fmtStr = fmtStr[0]
      // 单独处理一位或者两位的时间
      if (fmtStr!.length === 1) {
        // 一位
        fmt = fmt.replace(fmtStr, obj[key])
      } else {
        // 两位
        let numStr = '00' + obj[key]
        // "00" + 4 = "004"
        // "00" + 23 = "0023"
        if (fmtStr!.length === 4) {
          numStr = numStr.substr((obj[key] + '').length - 2)
        } else {
          numStr = numStr.substr((obj[key] + '').length)
        }
        fmt = fmt.replace(fmtStr, numStr)
      }
    }
  }
  // 3.将格式化之后的字符串返回
  return fmt
}
